package com.unalm.examensustitutorio.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import com.unalm.examensustitutorio.util.entity.EAula;
import com.unalm.examensustitutorio.util.entity.ECronogramaExamen;
import com.unalm.examensustitutorio.util.entity.EDetalleNota;
import com.unalm.examensustitutorio.util.entity.EInscripcion;
import com.unalm.examensustitutorio.util.entity.EUsuario;

public class DCronogramaExamen implements IDCronogramaExamen {

	private EntityManagerFactory emf;
	private EntityManager em;

	public void setEmf(EntityManagerFactory emf) {
		this.emf = emf;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<ECronogramaExamen> listarCronogramaExamenes() {
		List<ECronogramaExamen> lstCronogramaExamen = null;
		em = emf.createEntityManager();
		try {
			Query consulta = em
					.createQuery("select e from ECronogramaExamen e ");

			lstCronogramaExamen = consulta.getResultList();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			em.close();
		}

		return lstCronogramaExamen;
	}

	@Override
	public void inserta(ECronogramaExamen eCronogramaExamen) {
		// TODO Auto-generated method stub
		em = emf.createEntityManager();

		try {

			EUsuario docente = em.find(EUsuario.class,
					eCronogramaExamen.getStr_docente());
			EAula aula = em.find(EAula.class,
					Integer.parseInt(eCronogramaExamen.getStr_aulaExamen()));

			Query consulta = em
					.createQuery("select e from EInscripcion e where e.tbCurso.str_codCurso= '"
							+ eCronogramaExamen.getStr_curso()
							+ "' and e.tbTipoExamen.str_codTipo = '"
							+ eCronogramaExamen.getStr_tipo() + "'");

			List<EInscripcion> inscripcion = consulta.getResultList();

			for (EInscripcion eInscripcion : inscripcion) {
				eInscripcion.setInt_estReg(0);

			}

			docente.setInt_dispUSU(0);
			aula.setInt_dispoAula(0);

			em.getTransaction().begin();

			for (EInscripcion eInscripcion : inscripcion) {
				em.merge(eInscripcion);

			}
			em.merge(docente);
			em.merge(aula);
			em.persist(eCronogramaExamen);

		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();

		} finally {
			em.getTransaction().commit();
			em.close();
		}
	}

}
